package com.xxdh.controller.notice;


import com.xxdh.domain.dto.NoticeDto;
import com.xxdh.domain.po.Notice;
import com.xxdh.domain.vo.NoticeVo;
import com.xxdh.service.INoticeService;
import com.xxdh.util.Result;
import com.xxdh.util.UserHolder;
import io.swagger.models.auth.In;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

import static com.fasterxml.jackson.databind.type.LogicalType.Map;

/**
 * <p>
 * 公告表 前端控制器
 * </p>
 *
 * @author zwg
 * @since 2024-10-19
 */
@RestController
@RequestMapping("/notice")
@RequiredArgsConstructor
@CrossOrigin(origins = "*")
public class NoticeController {
    private final INoticeService  noticeService;

    /**
     *  添加公告
     * @param noticeDto 公告DTO
     * @return
     */
    @PostMapping("/addNotice")
    public String addNotice(@RequestBody NoticeDto noticeDto) {
        noticeService.addNotice(noticeDto);
        return Result.ok().toJSONString();
    }

    /**
     * 修改公告
     * @param noticeDto 公告DTO
     * @return
     */
    @PostMapping("/updateNotice")
    public String updateNotice(@RequestBody NoticeDto noticeDto) {
        noticeService.updateNotice(noticeDto);
        return Result.ok().toJSONString();
    }

    /**
     * 删除公告
     * @param noticeId 公告ID
     * @return
     */
    @PostMapping("/deleteNotice")
    public String deleteNotice(@RequestParam String noticeId) {
        noticeService.removeByNoticeId(noticeId);
        return Result.ok().toJSONString();
    }

    /**
     * 获取公告列表
     * @return
     */
    @GetMapping("/getNoticeList")
    public String getNoticeList() {
        Long userId = UserHolder.getUserId();
        Map<String, List<NoticeVo>>  result = noticeService.getNoticeListByUseId(userId);
        return Result.ok(result).toJSONString();
    }

    /**
     * 根据ID获取公告
     * @param noticeId 公告ID
     * @return
     */
    @GetMapping("/getNoticeById")
    public String getNoticeById(@RequestParam String noticeId) {
        Notice notice = noticeService.getById(noticeId);
        return Result.ok(notice).toJSONString();
    }

    /**
     * 更新公告状态(标记为已读)
     * @param noticeId 公告ID
     * @return
     */
    @PostMapping("/updateNoticeStatus")
    public String updateNoticeStatus(@RequestParam String noticeId) {
        noticeService.updateNoticeStatus(noticeId);
        return Result.ok().toJSONString();
    }



}
